home *** CD-ROM | disk | FTP | other *** search
- _global.SRT_CLASS = function()
- {
- this.seekLength = 5000;
- this.index = 0;
- };
- _global.SRT_CLASS.prototype.setOnData = function(target, method)
- {
- this.onDataTarget = target;
- this.onDataMethod = method;
- };
- _global.SRT_CLASS.prototype.getOnData = function()
- {
- return this.onDataTarget[this.onDataMethod];
- };
- _global.SRT_CLASS.prototype.getBytesLoaded = function()
- {
- return this.index;
- };
- _global.SRT_CLASS.prototype.getBytesTotal = function()
- {
- return this.sSubtitle.length;
- };
- _global.SRT_CLASS.prototype.unload = function()
- {
- clearInterval(this.seekInterval);
- };
- _global.SRT_CLASS.prototype.parse = function(str, subObj)
- {
- this.sSubtitle = str;
- this.subObj = subObj;
- this.index = 0;
- this.currentLine = 0;
- this.lastElement = 0;
- this.subIndex = null;
- this.subStart = null;
- this.subEnd = null;
- this.subText = "";
- this.lineArr = new Array();
- this.seekInterval = setInterval(this,"seek",1000 / (_global.FPS + 1));
- this.seek();
- };
- _global.SRT_CLASS.prototype.seek = function()
- {
- var lastIndex;
- var fragment;
- var i;
- var lineArr;
- var sLine;
- var frame;
- lastIndex = this.sSubtitle.lastIndexOf("\r\n\r\n",this.index + this.seekLength);
- lastindex += "\r\n\r\n".length;
- if(lastIndex > this.index)
- {
- fragment = this.sSubtitle.substring(this.index,lastIndex - 2);
- lineArr = fragment.split("\r\n");
- this.index = lastIndex;
- }
- else
- {
- fragment = this.sSubtitle.substr(this.index);
- lineArr = fragment.split("\r\n");
- lineArr.push("");
- this.index += fragment.length;
- }
- this.lastElement = 0;
- i = 0;
- while(i < lineArr.length)
- {
- this.currentLine = this.currentLine + 1;
- sLine = lineArr[i];
- if(i - this.lastElement == 0)
- {
- this.subIndex = parseInt(sLine);
- }
- else if(i - this.lastElement == 1)
- {
- this.parseTimestamp(sLine);
- }
- else if(sLine != "")
- {
- if(this.subText.length == 0)
- {
- this.subText = sLine;
- }
- else
- {
- this.subText += "\n" + sLine;
- }
- }
- else
- {
- if(parseInt(this.subIndex) == this.subIndex && parseInt(this.subStart) == this.subStart && parseInt(this.subEnd) == this.subEnd && this.subText.length != 0)
- {
- frame = Math.round(this.subStart / 1000 * _global.FPS);
- frame += 1;
- this.subObj[frame] = {index:this.subIndex,end:Math.round(this.subEnd / 1000 * _global.FPS),text:this.subText};
- }
- this.lastElement = i + 1;
- this.subIndex = null;
- this.subStart = null;
- this.subEnd = null;
- this.subText = "";
- }
- i++;
- }
- if(this.index >= this.sSubtitle.length)
- {
- clearInterval(this.seekInterval);
- this.onDataTarget[this.onDataMethod]();
- }
- };
- _global.SRT_CLASS.prototype.parseTimestamp = function(sLine)
- {
- var pattern;
- var hours;
- var minutes;
- var seconds;
- var milliseconds;
- if(parseInt(pattern = sLine.substr(0,2)) == pattern && sLine.charAt(2) == ":")
- {
- hours = parseInt(pattern);
- if(parseInt(pattern = sLine.substr(3,2)) == pattern && sLine.charAt(5) == ":")
- {
- minutes = parseInt(pattern);
- if(parseInt(pattern = sLine.substr(6,2)) == pattern && sLine.charAt(8) == ",")
- {
- seconds = parseInt(pattern);
- if(parseInt(pattern = sLine.substr(9,3)) == pattern && sLine.substr(12,5) == " --> ")
- {
- milliseconds = parseInt(pattern);
- this.subStart = hours * 3600000 + minutes * 60000 + seconds * 1000 + milliseconds;
- if(parseInt(pattern = sLine.substr(17,2)) == pattern && sLine.charAt(19) == ":")
- {
- hours = parseInt(pattern);
- if(parseInt(pattern = sLine.substr(20,2)) == pattern && sLine.charAt(22) == ":")
- {
- minutes = parseInt(pattern);
- if(parseInt(pattern = sLine.substr(23,2)) == pattern && sLine.charAt(25) == ",")
- {
- seconds = parseInt(pattern);
- if(parseInt(pattern = sLine.substr(26,3)) == pattern)
- {
- milliseconds = parseInt(pattern);
- this.subEnd = hours * 3600000 + minutes * 60000 + seconds * 1000 + milliseconds;
- }
- }
- }
- }
- }
- }
- }
- }
- };
-